import { formatDate } from './datetime';

/**
 * 随机生成姓名
 * @param {number} length - 姓名长度，默认为 2
 * @returns {string} 生成的随机姓名
 */
export function randomName(length = 2) {
  const firstNames = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜".split('');
  const lastNames = "豫章故郡洪都新府星分翼轸地接衡庐襟三江而带五湖控蛮荆而引瓯越物华天宝龙光射牛斗之墟人杰地灵徐孺下陈蕃之榻雄州雾列俊采星驰台隍枕夷夏之交宾主尽东南之美".split('');

  let name = firstNames[Math.floor(Math.random() * firstNames.length)];
  for (let i = 1; i < length; i++) {
    name += lastNames[Math.floor(Math.random() * lastNames.length)];
  }
  return name;
}

/**
 * 随机生成指定范围内的日期
 * @param {Date} start - 开始日期，默认为 1970 年 1 月 1 日
 * @param {Date} end - 结束日期，默认为当前时间
 * @param {string} [format] - 可选的格式化模板，默认为 ISO 字符串格式
 * @returns {string|Date} 若提供格式化模板，返回格式化后的字符串；否则返回 Date 对象
 */
export function randomRangeDate(start = new Date(0), end = new Date(), format) {
  const startTimestamp = start.getTime();
  const endTimestamp = end.getTime();
  const randomTimestamp = startTimestamp + Math.random() * (endTimestamp - startTimestamp);
  const randomDate = new Date(randomTimestamp);

  if (format) {
    return formatDate(randomDate, format);
  }
  return randomDate;
}

/**
 * 随机生成日期，默认范围为 1970 年 1 月 1 日到当前时间
 * @param {string} [format] - 可选的格式化模板，默认为 ISO 字符串格式
 * @returns {string|Date} 若提供格式化模板，返回格式化后的字符串；否则返回 Date 对象
 */
export function randomDate(format) {
  const start = new Date(0); // 1970 年 1 月 1 日
  const end = new Date(); // 当前时间
  const startTimestamp = start.getTime();
  const endTimestamp = end.getTime();
  const randomTimestamp = startTimestamp + Math.random() * (endTimestamp - startTimestamp);
  const randomDate = new Date(randomTimestamp);

  if (format) {
    return formatDate(randomDate, format);
  }
  return randomDate;
}

/**
 * 从数组中随机选取一个元素
 * @param {Array} array - 输入的数组
 * @returns {*} 随机选取的元素
 */
export function randomElementFromArray(array) {
  if (array.length === 0) return null;
  return array[Math.floor(Math.random() * array.length)];
}

/**
 * 随机生成地名地址
 * @returns {string} 生成的随机地名地址
 */
export function randomGeoAddress() {
  const naturalFeatures = [
    '桃花溪', '翠柳湖', '青松岭', '白鹭湾', '红梅谷', '翠竹山', '彩云滩',
    '紫霞峰', '清泉涧', '明月湾'
  ];

  const landmarks = [
    '梦想大厦', '智慧广场', '活力中心', '创新园区', '和谐家园', '幸福小区',
    '未来科技城', '文化艺术中心', '生态公园', '商业广场'
  ];

  const randomFeature = randomElementFromArray(naturalFeatures);
  const randomLandmark = randomElementFromArray(landmarks);
  const buildingNumber = Math.floor(Math.random() * 100) + 1;
  const unitNumber = Math.floor(Math.random() * 10) + 1;
  const roomNumber = Math.floor(Math.random() * 1000) + 101;

  return `${randomFeature}${randomLandmark}${buildingNumber}号楼${unitNumber}单元${roomNumber}号`;
}


/**
 * 随机生成人物描述
 * @returns {string} 生成的随机人物描述
 */
export function randomPersonDescription() {
  const genders = ['男性', '女性'];
  const ages = ['少年', '青年', '中年', '老年'];
  const heights = ['矮小', '中等身材', '高大'];
  const hairColors = ['黑色', '棕色', '金色'];
  const hairLengths = ['短发', '长发'];
  const facialFeatures = ['圆脸', '方脸', '瓜子脸'];
  const clothesStyles = ['休闲装', '正装', '运动装'];

  const randomGender = randomElementFromArray(genders);
  const randomAge = randomElementFromArray(ages);
  const randomHeight = randomElementFromArray(heights);
  const randomHairColor = randomElementFromArray(hairColors);
  const randomHairLength = randomElementFromArray(hairLengths);
  const randomFacialFeature = randomElementFromArray(facialFeatures);
  const randomClothesStyle = randomElementFromArray(clothesStyles);

  return `${randomGender}${randomAge}，${randomHeight}，${randomHairColor}${randomHairLength}，${randomFacialFeature}，身着${randomClothesStyle}`;
}

/**
 * 随机生成物品描述
 * @returns {string} 生成的随机物品描述
 */
export function randomItemDescription() {
  const itemTypes = ['书包', '手机', '钱包', '钥匙', '雨伞', '水杯'];
  const colors = ['红色', '蓝色', '绿色', '黄色', '黑色', '白色'];
  const materials = ['塑料', '金属', '皮质', '布料'];
  const features = ['有拉链', '带图案', '有 logo', '防水'];

  const randomItemType = randomElementFromArray(itemTypes);
  const randomColor = randomElementFromArray(colors);
  const randomMaterial = randomElementFromArray(materials);
  const randomFeature = randomElementFromArray(features);

  return `${randomColor}的${randomMaterial}${randomItemType}，${randomFeature}`;
}

/**
 * 随机生成手机号
 * @returns {string} 生成的随机手机号
 */
export function randomPhone() {
  const prefixes = ['13', '14', '15', '16', '17', '18', '19'];
  const randomPrefix = randomElementFromArray(prefixes);
  const randomSuffix = Math.floor(10000000 + Math.random() * 90000000).toString();
  return randomPrefix + randomSuffix;
}